package com.ce.pub.process.logic;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;
import org.springframework.dao.DataAccessException;

import com.ce.framework.datamaintain.dao.po.AbstractPO;
import com.ce.framework.exception.AppException;
import com.ce.framework.exception.DaoException;
import com.ce.sys.person.dao.po.SysPerson;
import com.ce.sys.role.dao.po.SysRole;

public interface ProcessDealService {
	
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:启动流程
	* 方法的参数和返回值: 
	* @param entity
	* @param definitionKey
	* @throws AppException 
	* @return
	*/
	public void doStart(AbstractPO entity, String definitionKey) throws AppException;
	

	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:启动流程
	* 方法的参数和返回值: 
	* @param vcId
	* @param po
	* @param definitionKey
	* @throws AppException 
    * @throws DataAccessException 
	* @throws DaoException 
	* @return
	*/
	public void startProcess(String[] vcId,AbstractPO po, String definitionKey) throws DataAccessException, AppException, DaoException;
	
	
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:查询待办任务记录
	* 方法的参数和返回值: 
	* @return
	* @throws AppException
	* @throws DataAccessException
	*/
	public List<Task> findTodoTasks(String userId, String definitionKey)throws DataAccessException, AppException;
	
	
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:查询待办任务记录id
	* 方法的参数和返回值: 
	* @return
	* @throws AppException
	* @throws DataAccessException
	*/
	public String findTodoTasksId(List<Task> tasks) throws DataAccessException,AppException;

	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:执行任务
	* 方法的参数和返回值: 
	* @param transition：seqenceFlow的名字,用于驳回
	* @param task：任务
	* @param model: 业务数据
	* @param currentUser：申请人
	* @param comment：审批意见
	* @return
	*/
	public void doTask(String transition, Task task, Object model,String comment) throws AppException;
	
	public InputStream getProcessTaskImg(String processInstanceId);
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:查询流程实例的审批意见
	* 方法的参数和返回值: 
	* @param processInstance
	* @return
	*/
	public List<Map<String, Object>> getComments(String processInstanceId);
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:获取部门及角色人员或获取角色人员
	* 方法的参数和返回值: 
	* @return
	*/
	public List<SysPerson> getPersonsByDepAndRole(String depId,String roleName);
	
	/**
	* 开发人：andy
	* 开发日期: 2014-2-26
	* 功能描述:获取人员角色
	* 方法的参数和返回值: 
	* @return
	*/
	public List<SysRole> getRolesByUser(String userId);
}
